// 文件路径: src/main/java/com/cupk/mapper/PublicationMapper.java (最终版)
package com.cupk.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cupk.dtos.DashboardDataDto;
import com.cupk.dtos.PublicationDto;
import com.cupk.entities.Publication;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
// 【注意】我们不再需要导入 @Select, 因为所有SQL都移到了XML中

import java.util.List;

@Mapper
public interface PublicationMapper extends BaseMapper<Publication> {

    // --- 原有方法 (已移除 @Select 注解) ---
    List<PublicationDto> findAllWithDetails();

    List<PublicationDto> findByUserIdWithDetails(@Param("userId") Long userId);

    List<PublicationDto> findByProjectIdWithDetails(@Param("projectId") Long projectId);

    PublicationDto findByIdWithDetails(@Param("id") Long id);

    List<PublicationDto> searchPublicationsWithDetails(@Param("keyword") String keyword);

    // 注意：您原来的 countByUserIdAndType, countByUserIdAndStatus 等方法，
    // 在XML中没有找到对应的实现，如果您的业务逻辑中还在使用它们，
    // 请确保在 PublicationMapper.xml 中为它们添加 <select> 实现。
    // 如果不再使用，可以安全地从这个接口中移除。
    // 为了保持完整性，我暂时保留它们的声明。
    Long countByUserIdAndType(@Param("userId") Long userId, @Param("type") String type);

    Long countByUserIdAndStatus(@Param("userId") Long userId, @Param("status") String status);

    Long countByUserIdAndYear(@Param("userId") Long userId, @Param("year") int year);

    Long getTotalCitationsByUserId(@Param("userId") Long userId);

    Double getAverageImpactFactorByUserId(@Param("userId") Long userId);

    // --- 为Dashboard新增的方法 ---
    long countPublishedForUser(@Param("userId") Long userId);

    long countPublishedForUserLastMonth(@Param("userId") Long userId);

    List<DashboardDataDto.MonthlyChartPoint> getMonthlyTrendForUser(@Param("userId") Long userId, @Param("year") int year);
}